<?php
/**
 * Делает бекап БД в файл при помощи движка phpMyAdmin.
 *
 * Расширение имени файла всегда sql (особенность PMA).
 *
 * export.php выводит ошибки на печать. когда ошибок нет -- пусто.
 *
 * FIXME : 2008-06-07 : lucky
 * sql_max_query_size является рекомендуемым параметром, со значением, взятым "c 
 * потолка". это значение можно вычислить точнее, если использовать опции 
 * php:memory_limit и mysql:max_allowed_packet 
 *
 * FIXME : 2008-06-07 : lucky
 * phpMyAdmin не выдает предупреждений, если какой-то запрос в бекапе превышает 
 * sql_max_query_size . хотя НАЛИЧИЕ ТАКОГО ЗАПРОСА МОЖЕТ ОЗНАЧАТЬ НЕВОЗМОЖНОСТЬ
 * ВОССТАНОВЛЕНИЯ БД ИЗ БЕКАПА. особенно критично превышение заданного на 
 * сервере max_allowed_packet (который по умочанию достаточно мал -- порядка 1M).
 */
if (!defined('RH_module')) die();

global $RH_NEXT_STATE,$RH_ERROR;

$__cwd = getcwd(); chdir(url_dirname(__FILE__).'pma_backup');
$__request = $_REQUEST;

ob_start(); // для перехвата сообщений об ошибках, которые выводит PMA

// устанавливает ./index.php : UpdateRequestHandler : goBackupDB
//$db = 'karni';
$db = $GLOBALS['M_ADMIN_UPDATE']['config']['db_name'];
$dump_file = $GLOBALS['M_ADMIN_UPDATE']['dump_sql'];

// значения параметров получены анализом запроса, который отправляет
// форма PMA.
$_REQUEST = array ( 
	'export_type' => 'server',
	'db_select' => array ( 0 => $db,),
	'what' => 'sql',
	'sql_header_comment' => '',
	'sql_compatibility' => 'NONE',
	'sql_structure' => 'something',
	'sql_drop_table' => 'something',
	'sql_if_not_exists' => 'something',
	'sql_auto_increment' => 'something',
	'sql_backquotes' => 'something',
	'sql_procedure_function' => 'something',
	'sql_data' => 'something',
	'sql_columns' => 'something',
	'sql_extended' => 'something',
	'sql_max_query_size' => '50000',  // lucky : 2008-06-06
                                    // значение по умолчанию, используемое PMA.
                                    //
                                    // очень важный параметр (см. #617)
                                    // слишком длинные запросы не могут прозелать через ограничения php и mysql,
                                    // вызывая "падение" скрипта или потерю данных при вставке в таблицу.
                                    // PHP ограничивает размер зароса через объем доступной памяти:
                                    // php.ini: memory_limit
                                    // (для чтения большого запроса может не хватить памяти)
                                    // MySQL ограничивает через размер пакета:
                                    // my.conf max_allowed_packet
                                    // Это ограничение может выставляться
                                    // как для клиентской библиотеки, так и для сервера.
	'sql_hex_for_blob' => 'something',
	'sql_type' => 'INSERT',
	'asfile' => 'sendit',
	'onserver' => 'saveit',
	'onserverover' => 'saveitover',
	//'filename_template' => '__SERVER__',
	'filename_template' => preg_replace('#\.sql$#', '', basename($dump_file)),
	'charset_of_file' => 'utf-8',
	'compression' => 'none',
);

foreach ($_REQUEST as $k=>$v) { $GLOBALS[$k] = $v; }

require_once './export.php';

$RH_ERROR = ob_get_clean();

if ($RH_ERROR) {
	// считаем что файл содержит неверные данные, поэтому затираем.
	@unlink($dump_file);
}

$RH_NEXT_STATE = 'Default';

chdir($__cwd);
$_REQUEST = $__request;

